import java.util.Arrays;

/**
 * 441. 排列硬币
 */
class Solution1 {
    public int arrangeCoins(int n) {
        if (n == 1) return 1;
        long sum = 0;
        int i = 1;
        for (i = 1;i<n;i++){
            sum += i;
            if (sum > n){
                break;
            }
        }
        return i-1;
    }
}

/**
 * 455. 分发饼干
 */
class Solution2 {
    public int findContentChildren(int[] g, int[] s) {
        int child = 0;
        int cookie = 0;
        Arrays.sort(g);
        Arrays.sort(s);
        while (child < g.length && cookie < s.length){
            if (g[child] <= s[cookie]){
                ////当用当前饼干可以满足当前孩子的需求，可以满足的孩子数量+1
                child++;
            }
            //// 饼干只可以用一次，因为饼干如果小的话，就是无法满足被抛弃，满足的话就是被用了
            cookie++;
        }
        return child;
    }
}

/**
 * 461. 汉明距离
 */
class Solution3 {
    public int hammingDistance(int x, int y) {
        int sum = 0;
        int ans = x^y;
        for(int i = 0;i<32;i++){
            if (((ans >>> i)&1) == 1){
                sum++;
            }
        }
        return sum;
    }
}

/**
 * 476. 数字的补数
 */
class Solution4 {
    public int findComplement(int num) {
        int ans = 0;
        for(int i=0;num>0;i++){
            if((num&1)==0)//找num中的0位
                ans+=1<<i;//把num中相应的0的位置 换成1
            num>>=1;
        }
        return ans;
    }
}